在正式開始學習前,我想先聊聊我所知道的自然語言處理。
在人類漫長的文明史中,語言無疑地佔據了非常重要的一部分,因為有了這項堪稱神器的工具,我們可以把內心的想法明確表達出來,並且通過不斷地交談來完成更複雜、更有效率的行為。
什麼是自然語言呢?我在網路上查到的定義是這樣:
Language that has developed in the usual way as a method of communicating between people.
也就是說,我們日常生活中所講出來的話就可以歸類在自然語言 ( Natural Language ) 當中,比方說 你吃飽了沒
等等。
然而對於電腦來說,要理解人類所講的話並不容易,因為電腦接收的是二進制的機器語言 ( Machine Language ),可以說是工程師下達給電腦執行的指令,例如 0101
之類的二進制數字。
當然,為了避免像我這種資工小白的腦袋變成一團漿糊,使用人類較能理解的程式語言 ( Programming Language ) 就能夠更輕鬆的對電腦下指令,比方說 if
、else
、for
、while
等等。
但這並不代表程式語言就可以和自然語言畫上等號了,因為它本質上還是被設計來和電腦溝通的一串程式碼,就好比我們無法只用簡單的迴圈或判斷式,就讓電腦理解 你吃飽了沒
這句話的意思。
那麼究竟要如何讓電腦理解我們日常交流所用的語言呢?答案就是利用自然語言處理 ( Natural Language Processing, NLP ) 的技術。
自然語言處理就是一門可以讓電腦理解人類語言並完成各項任務的學科,它可以應用在文本分類、問答系統、摘要、翻譯、資訊檢索等任務上。
有點抽象的話我可以畫個簡單的圖:
諸如此類的應用就是 NLP 在做的事,不過事實上,要完成這些任務一點也不容易,因為語言是一個非結構化且複雜的資料,同樣的單詞在不同場景就有不同的意思,同樣的意思在不同的語言又有不同的敘述方式 ( 這絕對不是我英文學不好的藉口 )。
假設我們有一個英文句子:
I recently watched a popular Korean drama called “The Glory”.
如果要把這個句子拆分成一個個有意義的單詞的話,可以通過空格將每一個單詞都切分開來:
I / recently / watched / a / popular / Korean / drama / called / “ / The / Glory / ” / .
現在換成中文的句子做同樣的事情:
我 / 最 / 近 / 看 / 了 / 一 / 部 / 很 / 受 / 歡 / 迎 / 的 / 韓 / 劇 /《 / 黑 / 暗 / 榮 / 耀 / 》/。
我們發現這樣的切割方式會發生問題,因為電腦並不知道 我 / 最 / 近
和我 / 最近
有什麼不一樣。
再舉一個例子:
I ate an apple.
I work at Apple.
我們人類可以很輕易地分辨出來兩個蘋果是不一樣的意思,但電腦卻沒有這樣子的常識,所以在它的理解中,就會把他們視為同一個東西。
面對這些挑戰,在自然語言處理發展的早期,我們是通過建立一套規則讓電腦理解人類語言,遇到什麼樣的情況就要做出對應的行為,後來發現語言太複雜了,沒辦法只用規則就能夠概括,所以又發展出利用統計和機率的方式,找出語言本身的規則並輸出最有可能的答案。
後來,隨著深度學習的出現,自然語言處理獲得了極大的發展,大型語言模型更是在這短短幾年內有了驚人的成果,或許未來還會有更多的驚人的發展。
今天就先寫到這邊吧,明天會正式進入第一個主題 ~
推薦文章
https://www.geeksforgeeks.org/history-and-evolution-of-nlp/
PS : 用 Excalidraw 畫的圖好讚,推推